package gestionnaires;  
 /*
 * @author Julien Bellaiche
 * @author Romain Louveau
 */

import java.util.Collection;  
import javax.ejb.Stateless;  
import javax.persistence.EntityManager;  
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;  
import javax.persistence.Query;  
import modeles.Utilisateur;  
  
@Stateless  
public class GestionnaireUtilisateurs {  
    // Ici injection de code : on n'initialise pas. L'entity manager sera créé  
    // à partir du contenu de persistence.xml  
    @PersistenceContext  
    private EntityManager em;  
  
    public void creerUtilisateursDeTest() {  
        creeUtilisateur("Julien", "Bellaiche", "Julien", "azerty");
        creeUtilisateur("Admin", "Admin", "Admin", "azerty");
        creeUtilisateur("Romain", "Louveau", "Romain", "azerty");  
        creeUtilisateur("Jean", "Marc", "Jean", "azerty");  
        creeUtilisateur("Audrey", "Biasotto", "Audrey","azerty"); 
   
    }  
  
    public Utilisateur creeUtilisateur(String nom, String prenom, String lelogin, String mdp) {   
        Utilisateur userToCreate = getUserFromLogin(lelogin);
        if(userToCreate == null){
            Utilisateur u = new Utilisateur(nom, prenom, lelogin, mdp); 
            em.persist(u);  
            return u;
            
        }else {
            return null;
        } 
    }  
  
    public Collection<Utilisateur> getAllUsers() {  
        // Exécution d'une requête équivalente à un select *  
        Query q = em.createQuery("select u from Utilisateur u");  
        return q.getResultList();
    }  

    public Collection<Utilisateur> getNextUsers(int deb,int nbr) {  
        try {
            Query q = em.createQuery("select u from Utilisateur u");  
            q.setFirstResult(deb);
            q.setMaxResults(nbr);
            return q.getResultList();
        } catch (NoResultException e){
            return null;
        }
    } 

    public Collection<Utilisateur> getPrevUsers(int deb,int nbr) {  
       try {
            Query q = em.createQuery("select u from Utilisateur u");  
            q.setFirstResult(deb-nbr);
            q.setMaxResults(nbr);
            return q.getResultList();
        } catch (NoResultException e){
            return null;
        }
    }
    
    public Utilisateur getUserFromLogin(String userlogin)  {
        Utilisateur user = null;
        try {
            Query q = em.createQuery("select u from Utilisateur u where u.login=:ulogin ").setParameter("ulogin", userlogin);
            user = (Utilisateur) q.getSingleResult();
            return user;
        } catch (NoResultException e){
            return null;
        }
    }
            
    
    public int updateUser (final String ulogin, final String ulastname, final String ufirstname, final String umdp) {
        Query q = em.createQuery("update Utilisateur u set u.firstname=:ufirstname, u.lastname=:ulastname, u.mdp=:umdp where u.login=:ulogin ");
              q.setParameter("ulogin", ulogin);
              q.setParameter("ufirstname", ufirstname);
              q.setParameter("ulastname", ulastname);
              q.setParameter("umdp", umdp);
       int deletUser = q.executeUpdate();
       return deletUser;
    }
    
    public int deleteUser (final String ulogin) {
        Query q = em.createQuery("delete from Utilisateur u where u.login=:ulogin ");
              q.setParameter("ulogin", ulogin);
       int deleteUser = q.executeUpdate();
       return deleteUser;
    }
    
}  